package com.enbatis.mybatisplugs.commons.utils;

import com.alibaba.fastjson.JSONObject;

public class ResultReturn<T> {

    private Integer code;
    private T data;
    private String msg;

    public ResultReturn() {
    }

    /**
     *
     * @param data 参数
     */
    private ResultReturn(T data) {
        this.code = 0;
        this.msg = "成功";
        this.data = data;
    }

    /**
     *
     * @param cm 参数
     */
    private ResultReturn(CodeMsg cm) {
        if(cm == null){
            return;
        }
        this.code = cm.getRetCode();
        this.msg = cm.getMessage();
    }


    private ResultReturn(String msg) {
        if(msg == null){
            return;
        }
        this.code = -1;
        this.msg = msg;
    }

    /**
     * 成功时候的调用
     * @param data 参数
     * @param <T> 泛型
     * @return 返回
     */
    public static <T> ResultReturn<T> success(T data){
        return new ResultReturn(data);
    }

    /**
     * 成功，不需要传入参数
     * @param <T> 泛型
     * @return 返回
     */
    @SuppressWarnings("unchecked")
    public static <T> ResultReturn<T> success(){
        return (ResultReturn<T>) success("");
    }

    /**
     * 失败时候的调用
     * @param cm 参数
     * @param <T> 泛型
     * @return 返回
     */
    public static <T> ResultReturn<T> error(CodeMsg cm){
        return new ResultReturn<>(cm);
    }


    public static <T> ResultReturn<T> error(String cm){
        return new ResultReturn<>(cm);
    }
    /**
     * 失败时候的调用,扩展消息参数
     * @param cm 参数
     * @param msg 参数
     * @param <T> 泛型
     * @return 返回
     */
    public static <T> ResultReturn<T> error(CodeMsg cm,String msg){
        cm.setMessage(cm.getMessage()+"--"+msg);
        return new ResultReturn(cm);
    }


    public static <T> ResultReturn<T> fail(String msg){
        return new ResultReturn<>(msg);
    }



    public static String warring(String msg){
        ResultReturn resultReturn=   new ResultReturn(msg);
        return JSONObject.toJSONString(resultReturn);
    }
    /**
     *
     * @return 返回
     */
    public T getData() {
        return data;
    }

    /**
     *
     * @return 返回
     */
    public String getMessage() {
        return msg;
    }

    /**
     *
     * @return int
     */
    public int getCode() {
        return code;
    }





}
